<!DOCTYPE html>
<html lang="zh">
<head><meta name="generator" content="Hexo 3.8.0">
    <meta charset="utf-8">
<title>规范开发设计 - BoBoBo客</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">



    <meta name="description" content="一、Commit规范完整格式：">
<meta name="keywords" content="Git">
<meta property="og:type" content="article">
<meta property="og:title" content="规范开发设计">
<meta property="og:url" content="http://enzolwb.gitee.io/2021/12/08/规范开发设计/index.html">
<meta property="og:site_name" content="BoBoBo客">
<meta property="og:description" content="一、Commit规范完整格式：">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/da/cb/da69572c5605556b8144eb4ee281c4cb.png?wh=1877*406">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/89/27/89c618a7415c0c38b09d86d7f882a427.png?wh=726*511">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/fa/d9/fa611f83053afd77cf3ddf83561ba1d9.png">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/9a/a3/9a290c28b0c238dd69e24dcc9f5c7ea3.png">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/23/69/2392d94feb95d3d64d765abe7d6e5e69.png?wh=3544x766">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/61/6d/61e022c1b25dab2b0fefb407fc1c776d.png?wh=2356x766">
<meta property="og:image" content="https://static001.geekbang.org/resource/image/37/88/37yy6e0896daa8f97883631624996388.png?wh=2288*1938">
<meta property="og:updated_time" content="2022-02-07T10:29:59.556Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="规范开发设计">
<meta name="twitter:description" content="一、Commit规范完整格式：">
<meta name="twitter:image" content="https://static001.geekbang.org/resource/image/da/cb/da69572c5605556b8144eb4ee281c4cb.png?wh=1877*406">





<link rel="icon" href="/thumbnails/code.png">


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.7.2/css/bulma.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:400,600|Source+Code+Pro">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@9.12.0/styles/atom-one-dark.css">


    
    
    
    <style>body>.footer,body>.navbar,body>.section{opacity:0}</style>
    

    
    
    
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/css/lightgallery.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/css/justifiedGallery.min.css">
    

    
    

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.css">


    
    
    
    

<link rel="stylesheet" href="/css/back-to-top.css">


    
    

    
    
    
    

    
    
<link rel="stylesheet" href="/css/progressbar.css">
<script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>

    
    
    

    
    
    


<link rel="stylesheet" href="/css/style.css">
</head>
<body class="is-3-column">
    <nav class="navbar navbar-main">
    <div class="container">
        <div class="navbar-brand is-flex-center">
            <a class="navbar-item navbar-logo" href="/">
            
                LiWb Blog
            
            </a>
        </div>
        <div class="navbar-menu">
            
            <div class="navbar-start">
                
                <a class="navbar-item" href="/archives">归档</a>
                
                <a class="navbar-item" href="/categories">分类</a>
                
                <a class="navbar-item" href="/tags">标签</a>
                
                <a class="navbar-item" href="/about">读我</a>
                
                <a class="navbar-item" href="/links">友链</a>
                
            </div>
            
            <div class="navbar-end">
            <a class="navbar-item" target="_blank" title="LeetCode" href="https://leetcode-cn.com/">YYDS</a>
                
                
                
                <a class="navbar-item search" title="搜索" href="javascript:;">
                    <i class="fas fa-search"></i>
                </a>
                
            </div>
        </div>
    </div>
</nav>
    
    <section class="section">
        <div class="container">
            <div class="columns">
                <div class="column is-8-tablet is-8-desktop is-6-widescreen has-order-2 column-main"><div class="card">
    
    <div class="card-content article ">
        
        <div class="level article-meta is-size-7 is-uppercase is-mobile is-overflow-x-auto">
            <div class="level-left">
                <time class="level-item has-text-grey" datetime="2021-12-08T06:19:18.000Z">2021-12-08</time>
                
                <div class="level-item">
                <a class="has-link-grey -link" href="/categories/服务端/">服务端</a>
                </div>
                
                
                <span class="level-item has-text-grey">
                    
                    
                    16 分钟 读完 (大约 2353 个字)
                </span>
                
                
            </div>
        </div>
        
        <h1 class="title is-size-3 is-size-4-mobile has-text-weight-normal">
            
                规范开发设计
            
        </h1>
        <div class="content">
            <h2 id="一、Commit规范"><a href="#一、Commit规范" class="headerlink" title="一、Commit规范"></a>一、Commit规范</h2><h3 id="完整格式："><a href="#完整格式：" class="headerlink" title="完整格式："></a>完整格式：</h3><p><img src="https://static001.geekbang.org/resource/image/da/cb/da69572c5605556b8144eb4ee281c4cb.png?wh=1877*406" alt="React库的一个commit 描述"></p>
 <a id="more"></a>
<figure class="highlight bash hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;<span class="hljs-built_in">type</span>&gt;[optional scope]: &lt;description&gt;</span><br><span class="line">// 空行</span><br><span class="line">[optional body]</span><br><span class="line">// 空行</span><br><span class="line">[optional footer(s)]</span><br></pre></td></tr></table></figure>
<h4 id="type"><a href="#type" class="headerlink" title="type"></a>type</h4><p><img src="https://static001.geekbang.org/resource/image/89/27/89c618a7415c0c38b09d86d7f882a427.png?wh=726*511" alt="img"></p>
<h3 id="简单格式"><a href="#简单格式" class="headerlink" title="简单格式"></a>简单格式</h3><figure class="highlight bash hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="hljs-built_in">log</span> --oneline</span><br><span class="line">4ee51d6 docs(user): update user/README.md</span><br><span class="line">176ba5d docs(user): update user/README.md</span><br><span class="line">5e829f8 docs(user): add README.md <span class="hljs-keyword">for</span> user</span><br><span class="line">f40929f feat(user): add delete user <span class="hljs-keyword">function</span></span><br><span class="line">fc70a21 feat(user): add create user <span class="hljs-keyword">function</span></span><br><span class="line">7157e9e docs(docs): append <span class="hljs-built_in">test</span> line <span class="hljs-string">'update3'</span> to README.md //这是别人/之前提交的</span><br></pre></td></tr></table></figure>
<h3 id="合并流程"><a href="#合并流程" class="headerlink" title="合并流程"></a>合并流程</h3><ol>
<li>新建一个分支 基于master (例如我们开发user模块)——$ git checkout -b feature/user</li>
<li>合并commit ——$ <strong>git rebase -i</strong> 7157e9e (ID 应该是需要最旧的commit的父ID )</li>
<li>检查 一下 是否合并成功 —— git log</li>
<li>合并到主干分支—— git checkout master ; git merge feature/user</li>
</ol>
<h3 id="修改Commit-Message"><a href="#修改Commit-Message" class="headerlink" title="修改Commit Message"></a>修改Commit Message</h3><ol>
<li>git commit –amend：修改最近一次 commit 的 message；</li>
<li><strong>git rebase -i</strong>：修改某次 commit 的 message。</li>
</ol>
<h2 id="二、代码目录"><a href="#二、代码目录" class="headerlink" title="二、代码目录"></a>二、代码目录</h2><p><a href="https://github.com/golang-standards/project-layout/blob/master/README_zh.md" target="_blank" rel="noopener">https://github.com/golang-standards/project-layout/blob/master/README_zh.md</a></p>
<ul>
<li>/pkg 是对外共享的文件夹</li>
<li>/internal 是对内的、不想对外的文件夹<br>例如/internal/myapp   /internal/pkg/myapp 对我自己app共享的pkg，一般用于项目内的跨多应用的公共共享代码 但其实作用域仅在单个目录内。<h2 id="三、工作流"><a href="#三、工作流" class="headerlink" title="三、工作流"></a>三、工作流</h2></li>
</ul>
<h3 id="集中式工作流"><a href="#集中式工作流" class="headerlink" title="集中式工作流"></a>集中式工作流</h3><p>最原始的提交方式 直接提交到远程仓库</p>
<h3 id="功能分支工作流"><a href="#功能分支工作流" class="headerlink" title="功能分支工作流"></a>功能分支工作流</h3><p>建立功能分支，最后按照分支merge（pull request）到master。</p>
<p>缺点：无法给分支分配明确的目的，不利于团队配合</p>
<h3 id="Git-Flow"><a href="#Git-Flow" class="headerlink" title="Git Flow"></a>Git Flow</h3><p><img src="https://static001.geekbang.org/resource/image/fa/d9/fa611f83053afd77cf3ddf83561ba1d9.png" alt="img"></p>
<ul>
<li><strong>只有一个develop 分支并且不能在其开发</strong></li>
<li><strong>在feature/somethingxxx 上面开发</strong></li>
<li>开发完毕需要先合并到develop分支，然后基于develop分支创建release分支进行测试</li>
<li>测试成功 再将release分支合并到master 并且打上tag</li>
<li>删除 feature分支 选择性删除release分支</li>
</ul>
<h4 id="一个线上出现bug-需要紧急修复的场景"><a href="#一个线上出现bug-需要紧急修复的场景" class="headerlink" title="一个线上出现bug 需要紧急修复的场景"></a>一个线上出现bug 需要紧急修复的场景</h4><figure class="highlight bash hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">$ git stash <span class="hljs-comment"># 1. 开发工作只完成了一半，还不想提交，可以临时保存修改至堆栈区</span></span><br><span class="line">$ git checkout -b hotfix/<span class="hljs-built_in">print</span>-error master <span class="hljs-comment"># 2. 从 master 建立 hotfix 分支</span></span><br><span class="line">$ vi main.go <span class="hljs-comment"># 3. 修复 bug，callmainfunction -&gt; call main function</span></span><br><span class="line">$ git commit -a -m <span class="hljs-string">'fix print message error bug'</span> <span class="hljs-comment"># 4. 提交修复</span></span><br><span class="line">$ git checkout develop <span class="hljs-comment"># 5. 切换到 develop 分支</span></span><br><span class="line">$ git merge --no-ff hotfix/<span class="hljs-built_in">print</span>-error <span class="hljs-comment"># 6. 把 hotfix 分支合并到 develop 分支</span></span><br><span class="line">$ git checkout master <span class="hljs-comment"># 7. 切换到 master 分支</span></span><br><span class="line">$ git merge --no-ff hotfix/<span class="hljs-built_in">print</span>-error <span class="hljs-comment"># 8. 把 hotfix 分支合并到 master</span></span><br><span class="line">$ git tag -a v0.9.1 -m <span class="hljs-string">"fix log bug"</span> <span class="hljs-comment"># 9. master 分支打 tag</span></span><br><span class="line">$ go build -v . <span class="hljs-comment"># 10. 编译代码，并将编译好的二进制更新到生产环境</span></span><br><span class="line">$ git branch -d hotfix/<span class="hljs-built_in">print</span>-error <span class="hljs-comment"># 11. 修复好后，删除 hotfix/xxx 分支</span></span><br><span class="line">$ git checkout feature/<span class="hljs-built_in">print</span>-hello-world <span class="hljs-comment"># 12. 切换到开发分支下</span></span><br><span class="line">$ git merge --no-ff develop <span class="hljs-comment"># 13. 因为 develop 有更新，这里最好同步更新下</span></span><br><span class="line">$ git stash pop <span class="hljs-comment"># 14. 恢复到修复前的工作状态</span></span><br></pre></td></tr></table></figure>
<h3 id="Forking-工作流"><a href="#Forking-工作流" class="headerlink" title="Forking 工作流"></a>Forking 工作流</h3><blockquote>
<p>适用于开源项目的贡献</p>
</blockquote>
<ol>
<li>fork 仓库</li>
<li>clone 仓库到本地 </li>
<li>创建 远程地址 upsteam ，地址为开源项目地址 </li>
</ol>
<figure class="highlight bash hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git remote add upstream https://xxxxxx</span><br><span class="line">git remote <span class="hljs-built_in">set</span>-url --push upstream no_push <span class="hljs-comment"># Never push to upstream master</span></span><br></pre></td></tr></table></figure>
<ol start="4">
<li>创建功能分支 —— git checkout -b feature/add-function</li>
</ol>
<figure class="highlight bash hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">要同步本地仓库的 master 分支为最新的状态（跟 upstream master 分支一致</span><br><span class="line">$ git fetch upstream</span><br><span class="line">$ git checkout master</span><br><span class="line">$ git rebase upstream/master</span><br><span class="line">// 题外话 rebase合并分支 和 merge的区别</span><br><span class="line">下游分支更新上游分支内容的时候使用 rebase 通俗地讲就是 自上而下的同步</span><br><span class="line">上游分支合并下游分支内容的时候使用 merge</span><br></pre></td></tr></table></figure>
<ol start="5">
<li>提交commit (最好在 commit 再同步一下master的代码 如上所示)</li>
<li>push 到个人fork的仓库 ——git push -f origin feature/add-function</li>
<li>在个人仓库页 pull request (base最好选择对方的master分支)</li>
</ol>
<h2 id="四、生命周期"><a href="#四、生命周期" class="headerlink" title="四、生命周期"></a>四、生命周期</h2><p><img src="https://static001.geekbang.org/resource/image/9a/a3/9a290c28b0c238dd69e24dcc9f5c7ea3.png" alt="img"></p>
<blockquote>
<p>研发模式建议选择<strong>敏捷模式</strong>，因为它更能胜任互联网时代快速迭代的诉求。DevOps 则要优先确保<strong>落地 CI/CD 技术</strong>，接着尝试落地 ChatOps 技术，如果有条件可以积极探索 AIOps 和 GitOps</p>
</blockquote>
<h3 id="敏捷模式"><a href="#敏捷模式" class="headerlink" title="敏捷模式"></a>敏捷模式</h3><p>把一个大的需求分成多个、可分阶段完成的小迭代，每个迭代交付的都是一个可使用的软件。在开发过程中，软件要一直处于可使用状态。</p>
<h3 id="CI-CD"><a href="#CI-CD" class="headerlink" title="CI/CD"></a>CI/CD</h3><blockquote>
<p>持续开发</p>
<p>持续交付和持续部署。二者都是持续地部署应用，但是持续部署整个过程是自动化的，而持续交付中，应用在发布到现网前需要人工审批是否允许发布</p>
<p>详细见下方</p>
</blockquote>
<h3 id="DevOps"><a href="#DevOps" class="headerlink" title="DevOps"></a>DevOps</h3><blockquote>
<p>DevOps 是一组过程、方法和系统的统称，而 CI/CD 只是一种软件构建和发布的技术。</p>
</blockquote>
<ul>
<li><p>ChatOps (@机器人 发送指令 )</p>
</li>
<li><p>AIOps</p>
</li>
<li><p>GitOps</p>
<ul>
<li>声明性容器编排：通过 Kubernetes YAML 格式的资源定义文件，来定义如何部署应用。</li>
<li>不可变基础设施：基础设施中的每个组件都可以自动的部署，组件在部署完成后，不能发生变更。如果需要变更，则需要重新部署一个新的组件。例如，Kubernetes 中的 Pod 就是一个不可变基础设施。</li>
<li>连续同步：不断地查看 Git 存储库，将任何状态更改反映到 Kubernetes 集群中。</li>
</ul>
<blockquote>
<p>首先，开发人员开发完代码后推送到 Git 仓库，触发 CI 流程，CI 流程通过编译构建出 Docker 镜像，并将镜像 push 到 Docker 镜像仓库中。Push 动作会触发一个 push 事件，通过 webhook 的形式通知到 Config Updater 服务，Config Updater 服务会从 webhook 请求中获取最新 push 的镜像名，并更新 Git 仓库中的 Kubernetes YAML 文件。</p>
<p>然后，GitOps 的 Deploy Operator 服务，检测到 YAML 文件的变动，会重新从 Git 仓库中提取变更的文件，并将镜像部署到 Kubernetes 集群中。Config Updater 和 Deploy Operator 两个组件需要开发人员设计开发。</p>
</blockquote>
</li>
</ul>
<h2 id="五、高质量项目"><a href="#五、高质量项目" class="headerlink" title="五、高质量项目"></a>五、高质量项目</h2><h3 id="优雅编程"><a href="#优雅编程" class="headerlink" title="优雅编程"></a>优雅编程</h3><p><img src="https://static001.geekbang.org/resource/image/23/69/2392d94feb95d3d64d765abe7d6e5e69.png?wh=3544x766" alt="img"></p>
<h4 id="1-按层划分-（MVC-web项目）-按功能拆分-（微服务-基础设施）"><a href="#1-按层划分-（MVC-web项目）-按功能拆分-（微服务-基础设施）" class="headerlink" title="1. 按层划分 （MVC web项目）|| 按功能拆分 （微服务 基础设施）"></a>1. 按层划分 （MVC web项目）|| 按功能拆分 （微服务 基础设施）</h4><h4 id="1-按层划分-MVC的web项目-按功能划分-（微服务-基础设施）"><a href="#1-按层划分-MVC的web项目-按功能划分-（微服务-基础设施）" class="headerlink" title="1. 按层划分 (MVC的web项目) || 按功能划分 （微服务 基础设施）"></a>1. 按层划分 (MVC的web项目) || 按功能划分 （微服务 基础设施）</h4><h4 id="2-代码规范"><a href="#2-代码规范" class="headerlink" title="2. 代码规范"></a>2. 代码规范</h4><ul>
<li><a href="https://github.com/xxjwxc/uber_go_guide_cn" target="_blank" rel="noopener">Uber Go 语言编码规范</a></li>
<li>静态代码检查工具 <a href="https://github.com/golangci/golangci-lint" target="_blank" rel="noopener">golangci-lint</a></li>
<li>最佳实践<ul>
<li><a href="https://golang.org/doc/effective_go" target="_blank" rel="noopener">Effective Go</a>：高效 Go 编程，由 Golang 官方编写，里面包含了编写 Go 代码的一些建议，也可以理解为最佳实践。</li>
<li><a href="https://github.com/golang/go/wiki/CodeReviewComments" target="_blank" rel="noopener">Go Code Review Comments</a>：Golang 官方编写的 Go 最佳实践，作为 Effective Go 的补充。</li>
<li><a href="https://rakyll.org/style-packages/" target="_blank" rel="noopener">Style guideline for Go packages</a>：包含了如何组织 Go 包、如何命名 Go 包、如何写 Go 包文档的一些建议。</li>
</ul>
</li>
</ul>
<h4 id="3-单元测试"><a href="#3-单元测试" class="headerlink" title="3. 单元测试"></a>3. 单元测试</h4><blockquote>
<p>参见 daming-basic/other/unit_test</p>
</blockquote>
<ol>
<li><a href="https://github.com/golang/mock" target="_blank" rel="noopener">golang/mock</a>，是官方提供的 Mock 框架。它实现了基于 interface 的 Mock 功能，能够与 Golang 内置的 testing 包做很好的集成，是最常用的 Mock 工具。golang/mock 提供了 mockgen 工具用来生成 interface 对应的 Mock 源文件。</li>
<li><a href="https://github.com/DATA-DOG/go-sqlmock" target="_blank" rel="noopener">sqlmock</a>，可以用来模拟数据库连接。数据库是项目中比较常见的依赖，在遇到数据库依赖时都可以用它。</li>
<li><a href="https://github.com/jarcoal/httpmock" target="_blank" rel="noopener">httpmock</a>，可以用来 Mock HTTP 请求。</li>
<li><a href="bouk/monkey">bouk/monkey</a>，猴子补丁，能够通过替换函数指针的方式来修改任意函数的实现。如果 golang/mock、sqlmock 和 httpmock 这几种方法都不能满足我们的需求，我们可以尝试通过猴子补丁的方式来 Mock 依赖。可以这么说，猴子补丁提供了单元测试 Mock 依赖的最终解决方案。</li>
</ol>
<h5 id="单元测试覆盖率"><a href="#单元测试覆盖率" class="headerlink" title="单元测试覆盖率"></a>单元测试覆盖率</h5><ul>
<li><p>使用 gotests 工具自动生成单元测试代码，减少编写单元测试用例的工作量，将你从重复的劳动中解放出来。</p>
</li>
<li><p>定期检查单元测试覆盖率。你可以通过以下方法来检查：</p>
<blockquote>
<p>$ go test -race -cover  -coverprofile=./coverage.out -timeout=10m -short -v ./…<br>$ go tool cover -func ./coverage.out</p>
</blockquote>
</li>
</ul>
<h3 id="优秀的项目管理"><a href="#优秀的项目管理" class="headerlink" title="优秀的项目管理"></a>优秀的项目管理</h3><p><img src="https://static001.geekbang.org/resource/image/61/6d/61e022c1b25dab2b0fefb407fc1c776d.png?wh=2356x766" alt="img"></p>
<h4 id="高效（标准）开发流程"><a href="#高效（标准）开发流程" class="headerlink" title="高效（标准）开发流程"></a>高效（标准）开发流程</h4><p><img src="https://static001.geekbang.org/resource/image/37/88/37yy6e0896daa8f97883631624996388.png?wh=2288*1938" alt="img"></p>
<h4 id="自动生成代码"><a href="#自动生成代码" class="headerlink" title="自动生成代码"></a>自动生成代码</h4><ul>
<li>错误码、错误码说明文档。</li>
<li>自动生成缺失的 doc.go 文件。</li>
<li>利用 gotests 工具，自动生成单元测试用例。</li>
<li>使用 Swagger 工具，自动生成 Swagger 文档。</li>
<li>使用 Mock 工具，自动生成接口的 Mock 实例。</li>
</ul>
<h3 id="高质量文档"><a href="#高质量文档" class="headerlink" title="高质量文档"></a>高质量文档</h3><ul>
<li>README.md</li>
<li>api 接口文档</li>
<li>使用文档</li>
<li>安装文档 设计文档 开发文档……..</li>
</ul>
<h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><ul>
<li><a href="https://time.geekbang.org/column/article/382342" target="_blank" rel="noopener">https://time.geekbang.org/column/article/382342</a></li>
</ul>

        </div>
        
        <div class="level is-size-7 is-uppercase">
            <div class="level-start">
                <div class="level-item">
                    <span class="is-size-6 has-text-grey has-mr-7">#</span>
                    <a class="has-link-grey -link" href="/tags/Git/">Git</a>
                </div>
            </div>
        </div>
        
        
        
        <div class="social-share"></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/css/share.min.css">
<script src="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/js/social-share.min.js"></script>
        
    </div>
</div>



<div class="card">
    <div class="card-content">
        <h3 class="menu-label has-text-centered">喜欢这篇文章？打赏一下作者吧</h3>
        <div class="buttons is-centered">
            
                
<a class="button is-info donate">
    <span class="icon is-small">
        <i class="fab fa-alipay"></i>
    </span>
    <span>支付宝</span>
    <div class="qrcode"><img src="https://i.loli.net/2020/09/04/bwDxBLPhmSCMQHY.jpg" alt="支付宝"></div>
</a>

                
                
<a class="button is-success donate">
    <span class="icon is-small">
        <i class="fab fa-weixin"></i>
    </span>
    <span>微信</span>
    <div class="qrcode"><img src="https://i.loli.net/2020/09/04/aXMbI9SeGY7DVtu.jpg" alt="微信"></div>
</a>

                
        </div>
    </div>
</div>



<div class="card card-transparent">
    <div class="level post-navigation is-flex-wrap is-mobile">
        
        <div class="level-start">
            <a class="level level-item has-link-grey  article-nav-prev" href="/2022/01/08/Redis性能影响因素/">
                <i class="level-item fas fa-chevron-left"></i>
                <span class="level-item">Redis性能影响因素</span>
            </a>
        </div>
        
        
        <div class="level-end">
            <a class="level level-item has-link-grey  article-nav-next" href="/2021/11/14/zap库的源码解读/">
                <span class="level-item">zap库的源码解读</span>
                <i class="level-item fas fa-chevron-right"></i>
            </a>
        </div>
        
    </div>
</div>



<div class="card">
    <div class="card-content">
        <h3 class="title is-5 has-text-weight-normal">评论</h3>
        
<div id="SOHUCS" sid="2021/12/08/规范开发设计/"></div>
<script charset="utf-8" type="text/javascript" src="https://changyan.sohu.com/upload/changyan.js"></script>
<script type="text/javascript">
window.changyan.api.config({
    appid: 'xxxxxxxx',
    conf: 'prod_xxxxxxxx'
});
</script>

    </div>
</div>
</div>
                




<div class="column is-4-tablet is-4-desktop is-3-widescreen  has-order-1 column-left ">
    
        
<div class="card widget">
    <div class="card-content">
        <nav class="level">
            <div class="level-item has-text-centered">
                <div>
                    
                        <figure class="image container is-128x128 has-mb-6">
                            <img class="is-rounded" src="https://cdn.learnku.com/uploads/avatars/25478_1552028471.jpg!/both/300x300" alt="Enzo">
                        </figure>
                    
                    
                    <p class="is-size-4 is-block">
                        Enzo
                    </p>
                    
                    
                    <p class="is-size-6 is-block">
                        Let it be
                    </p>
                    
                    
                    <p class="is-size-6 is-flex is-flex-center has-text-grey">
                        <i class="fas fa-map-marker-alt has-mr-7"></i>
                        <span>天津</span>
                    </p>
                    
                </div>
            </div>
        </nav>
        <nav class="level is-mobile">
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        文章
                    </p>
                    <p class="title has-text-weight-normal">
                        24
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        分类
                    </p>
                    <p class="title has-text-weight-normal">
                        3
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        标签
                    </p>
                    <p class="title has-text-weight-normal">
                        16
                    </p>
                </div>
            </div>
        </nav>
        <div class="level">
            <a class="level-item button is-link is-rounded" href="https://weibo.com/u/2812380431">
                关注我</a>
        </div>
        
        
    </div>
</div>
    
        
    
        

<div class="card widget">
    <div class="card-content">
        <div class="menu">
        <h3 class="menu-label">
            链接
        </h3>
        <ul class="menu-list">
        
            <li>
                <a class="level is-mobile" href="https://github.com/EnzoLwb" target="_blank">
                    <span class="level-left">
                        <span class="level-item">Github</span>
                    </span>
                    <span class="level-right">
                        <span class="level-item tag">github.com</span>
                    </span>
                </a>
            </li>
        
            <li>
                <a class="level is-mobile" href="https://gitee.com/enzolwb" target="_blank">
                    <span class="level-left">
                        <span class="level-item">Gitee</span>
                    </span>
                    <span class="level-right">
                        <span class="level-item tag">gitee.com</span>
                    </span>
                </a>
            </li>
        
            <li>
                <a class="level is-mobile" href="https://learnku.com/blog/liwenbo" target="_blank">
                    <span class="level-left">
                        <span class="level-item">Learnku</span>
                    </span>
                    <span class="level-right">
                        <span class="level-item tag">learnku.com</span>
                    </span>
                </a>
            </li>
        
        </ul>
        </div>
    </div>
</div>


    
        
<div class="card widget">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                分类
            </h3>
            <ul class="menu-list">
            <li>
        <a class="level is-marginless" href="/categories/前端/">
            <span class="level-start">
                <span class="level-item">前端</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">1</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/categories/后端/">
            <span class="level-start">
                <span class="level-item">后端</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">16</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/categories/服务端/">
            <span class="level-start">
                <span class="level-item">服务端</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">6</span>
            </span>
        </a></li>
            </ul>
        </div>
    </div>
</div>
    
        
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            标签云
        </h3>
        <a href="/tags/FFMPEG/" style="font-size: 10px;">FFMPEG</a> <a href="/tags/Git/" style="font-size: 10px;">Git</a> <a href="/tags/Laravel/" style="font-size: 16.67px;">Laravel</a> <a href="/tags/Vue/" style="font-size: 10px;">Vue</a> <a href="/tags/docker/" style="font-size: 10px;">docker</a> <a href="/tags/elasticsearch/" style="font-size: 10px;">elasticsearch</a> <a href="/tags/flarum/" style="font-size: 10px;">flarum</a> <a href="/tags/golang/" style="font-size: 20px;">golang</a> <a href="/tags/laravel-echo-server/" style="font-size: 13.33px;">laravel-echo-server</a> <a href="/tags/lnmp/" style="font-size: 13.33px;">lnmp</a> <a href="/tags/nginx/" style="font-size: 10px;">nginx</a> <a href="/tags/redis/" style="font-size: 13.33px;">redis</a> <a href="/tags/supervisor/" style="font-size: 10px;">supervisor</a> <a href="/tags/支付/" style="font-size: 10px;">支付</a> <a href="/tags/爬虫/" style="font-size: 10px;">爬虫</a> <a href="/tags/论坛/" style="font-size: 10px;">论坛</a>
    </div>
</div>

    
    
        <div class="column-right-shadow is-hidden-widescreen ">
        
            
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            最新文章
        </h3>
        
        <article class="media">
            
            <a href="/2022/01/24/Go和Redis的规范/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/jscw1.png" alt="Go + Redis 的规范">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2022-01-24T12:05:10.000Z">2022-01-24</time></div>
                    <a href="/2022/01/24/Go和Redis的规范/" class="has-link-black-ter is-size-6">Go + Redis 的规范</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2022/01/08/Redis性能影响因素/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/images/thumbnail.svg" alt="Redis性能影响因素">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2022-01-08T06:10:21.000Z">2022-01-08</time></div>
                    <a href="/2022/01/08/Redis性能影响因素/" class="has-link-black-ter is-size-6">Redis性能影响因素</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/服务端/">服务端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/12/08/规范开发设计/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/images/thumbnail.svg" alt="规范开发设计">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-12-08T06:19:18.000Z">2021-12-08</time></div>
                    <a href="/2021/12/08/规范开发设计/" class="has-link-black-ter is-size-6">规范开发设计</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/服务端/">服务端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/11/14/zap库的源码解读/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/code.png" alt="zap库的源码解读">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-11-14T02:15:00.000Z">2021-11-14</time></div>
                    <a href="/2021/11/14/zap库的源码解读/" class="has-link-black-ter is-size-6">zap库的源码解读</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/09/14/逃逸分析/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/max1.png" alt="go 逃逸分析">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-09-14T12:15:00.000Z">2021-09-14</time></div>
                    <a href="/2021/09/14/逃逸分析/" class="has-link-black-ter is-size-6">go 逃逸分析</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
    </div>
</div>

        
            <div class="card widget">
    <div class="card-content">
        <div class="menu">
        <h3 class="menu-label">
            归档
        </h3>
        <ul class="menu-list">
        
        <li>
            <a class="level is-marginless" href="/archives/2022/01/">
                <span class="level-start">
                    <span class="level-item">一月 2022</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">2</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/12/">
                <span class="level-start">
                    <span class="level-item">十二月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">1</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/11/">
                <span class="level-start">
                    <span class="level-item">十一月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">1</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/09/">
                <span class="level-start">
                    <span class="level-item">九月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">7</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2020/09/">
                <span class="level-start">
                    <span class="level-item">九月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">3</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2019/03/">
                <span class="level-start">
                    <span class="level-item">三月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">3</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2019/02/">
                <span class="level-start">
                    <span class="level-item">二月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">7</span>
                </span>
            </a>
        </li>
        
        </ul>
        </div>
    </div>
</div>
        
            <div class="card widget">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                标签
            </h3>
            <div class="field is-grouped is-grouped-multiline">
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/FFMPEG/">
                        <span class="tag">FFMPEG</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Git/">
                        <span class="tag">Git</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Laravel/">
                        <span class="tag">Laravel</span>
                        <span class="tag is-grey">6</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Vue/">
                        <span class="tag">Vue</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/docker/">
                        <span class="tag">docker</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/elasticsearch/">
                        <span class="tag">elasticsearch</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/flarum/">
                        <span class="tag">flarum</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/golang/">
                        <span class="tag">golang</span>
                        <span class="tag is-grey">10</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/laravel-echo-server/">
                        <span class="tag">laravel-echo-server</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/lnmp/">
                        <span class="tag">lnmp</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/nginx/">
                        <span class="tag">nginx</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/redis/">
                        <span class="tag">redis</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/supervisor/">
                        <span class="tag">supervisor</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/支付/">
                        <span class="tag">支付</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/爬虫/">
                        <span class="tag">爬虫</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/论坛/">
                        <span class="tag">论坛</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
            </div>
        </div>
    </div>
</div>
        
        </div>
    
</div>

                




<div class="column is-4-tablet is-4-desktop is-3-widescreen is-hidden-touch is-hidden-desktop-only has-order-3 column-right ">
    
        
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            最新文章
        </h3>
        
        <article class="media">
            
            <a href="/2022/01/24/Go和Redis的规范/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/jscw1.png" alt="Go + Redis 的规范">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2022-01-24T12:05:10.000Z">2022-01-24</time></div>
                    <a href="/2022/01/24/Go和Redis的规范/" class="has-link-black-ter is-size-6">Go + Redis 的规范</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2022/01/08/Redis性能影响因素/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/images/thumbnail.svg" alt="Redis性能影响因素">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2022-01-08T06:10:21.000Z">2022-01-08</time></div>
                    <a href="/2022/01/08/Redis性能影响因素/" class="has-link-black-ter is-size-6">Redis性能影响因素</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/服务端/">服务端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/12/08/规范开发设计/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/images/thumbnail.svg" alt="规范开发设计">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-12-08T06:19:18.000Z">2021-12-08</time></div>
                    <a href="/2021/12/08/规范开发设计/" class="has-link-black-ter is-size-6">规范开发设计</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/服务端/">服务端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/11/14/zap库的源码解读/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/code.png" alt="zap库的源码解读">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-11-14T02:15:00.000Z">2021-11-14</time></div>
                    <a href="/2021/11/14/zap库的源码解读/" class="has-link-black-ter is-size-6">zap库的源码解读</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
        <article class="media">
            
            <a href="/2021/09/14/逃逸分析/" class="media-left">
                <p class="image is-64x64">
                    <img class="thumbnail" src="/thumbnails/max1.png" alt="go 逃逸分析">
                </p>
            </a>
            
            <div class="media-content">
                <div class="content">
                    <div><time class="has-text-grey is-size-7 is-uppercase" datetime="2021-09-14T12:15:00.000Z">2021-09-14</time></div>
                    <a href="/2021/09/14/逃逸分析/" class="has-link-black-ter is-size-6">go 逃逸分析</a>
                    <p class="is-size-7 is-uppercase">
                        <a class="has-link-grey -link" href="/categories/后端/">后端</a>
                    </p>
                </div>
            </div>
        </article>
        
    </div>
</div>

    
        <div class="card widget">
    <div class="card-content">
        <div class="menu">
        <h3 class="menu-label">
            归档
        </h3>
        <ul class="menu-list">
        
        <li>
            <a class="level is-marginless" href="/archives/2022/01/">
                <span class="level-start">
                    <span class="level-item">一月 2022</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">2</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/12/">
                <span class="level-start">
                    <span class="level-item">十二月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">1</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/11/">
                <span class="level-start">
                    <span class="level-item">十一月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">1</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2021/09/">
                <span class="level-start">
                    <span class="level-item">九月 2021</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">7</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2020/09/">
                <span class="level-start">
                    <span class="level-item">九月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">3</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2019/03/">
                <span class="level-start">
                    <span class="level-item">三月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">3</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/archives/2019/02/">
                <span class="level-start">
                    <span class="level-item">二月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">7</span>
                </span>
            </a>
        </li>
        
        </ul>
        </div>
    </div>
</div>
    
        <div class="card widget">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                标签
            </h3>
            <div class="field is-grouped is-grouped-multiline">
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/FFMPEG/">
                        <span class="tag">FFMPEG</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Git/">
                        <span class="tag">Git</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Laravel/">
                        <span class="tag">Laravel</span>
                        <span class="tag is-grey">6</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/Vue/">
                        <span class="tag">Vue</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/docker/">
                        <span class="tag">docker</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/elasticsearch/">
                        <span class="tag">elasticsearch</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/flarum/">
                        <span class="tag">flarum</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/golang/">
                        <span class="tag">golang</span>
                        <span class="tag is-grey">10</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/laravel-echo-server/">
                        <span class="tag">laravel-echo-server</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/lnmp/">
                        <span class="tag">lnmp</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/nginx/">
                        <span class="tag">nginx</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/redis/">
                        <span class="tag">redis</span>
                        <span class="tag is-grey">2</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/supervisor/">
                        <span class="tag">supervisor</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/支付/">
                        <span class="tag">支付</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/爬虫/">
                        <span class="tag">爬虫</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
                <div class="control">
                    <a class="tags has-addons" href="/tags/论坛/">
                        <span class="tag">论坛</span>
                        <span class="tag is-grey">1</span>
                    </a>
                </div>
                
            </div>
        </div>
    </div>
</div>
    
    
</div>

            </div>
        </div>
    </section>
    <footer class="footer">
    <div class="container">
        <div class="level">
            <div class="level-start has-text-centered-mobile">
                <a class="footer-logo is-block has-mb-6" href="/">
                
                    LiWb Blog
                
                </a>
                <p class="is-size-7">
                &copy; 2022 Li Wen Bo&nbsp;
                Powered by <a href="http://hexo.io/" target="_blank">Hexo</a> & <a href="http://github.com/ppoffice/hexo-theme-icarus" target="_blank">Icarus</a>
                
                </p>
            </div>
            <div class="level-end">
            
                <div class="field has-addons is-flex-center-mobile has-mt-5-mobile is-flex-wrap is-flex-middle">
                
                
                <p class="control">
                    <a class="button is-white is-large" target="_blank" title="Repositories  on GitHub" href="https://github.com/EnzoLwb">
                        
                        <i class="fab fa-github"></i>
                        
                    </a>
                </p>
                
                <p class="control">
                    <a class="button is-white is-large" target="_blank" title="Repositories  on Gitee" href="https://gitee.com/enzolwb">
                        
                        <i class="fab fa-gofore"></i>
                        
                    </a>
                </p>
                
                </div>
            
            </div>
        </div>
    </div>
</footer>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment-with-locales.min.js"></script>
<script>moment.locale("zh-CN");</script>


    
    
    
    <script src="/js/animation.js"></script>
    

    
    
    
    <script src="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/js/lightgallery.min.js" defer></script>
    <script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js" defer></script>
    <script src="/js/gallery.js" defer></script>
    

    
    

<div id="outdated">
    <h6>Your browser is out-of-date!</h6>
    <p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/">Update
            my browser now </a></p>
    <p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">&times;</a></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.js" defer></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        outdatedBrowser({
            bgColor: '#f25648',
            color: '#ffffff',
            lowerThan: 'flex'
        });
    });
</script>


    
    
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.5/unpacked/MathJax.js?config=TeX-MML-AM_CHTML" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    MathJax.Hub.Config({
        'HTML-CSS': {
            matchFontHeight: false
        },
        SVG: {
            matchFontHeight: false
        },
        CommonHTML: {
            matchFontHeight: false
        },
        tex2jax: {
            inlineMath: [
                ['$','$'],
                ['\\(','\\)']
            ]
        }
    });
});
</script>

    
    

<a id="back-to-top" title="回到顶端" href="javascript:;">
    <i class="fas fa-chevron-up"></i>
</a>
<script src="/js/back-to-top.js" defer></script>


    
    

    
    
    
    

    
    
    
    
    
    <script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js" defer></script>
    <script src="/js/clipboard.js" defer></script>
    

    
    
    


<script src="/js/main.js" defer></script>

    
    <div class="searchbox ins-search">
    <div class="searchbox-container ins-search-container">
        <div class="searchbox-input-wrapper">
            <input type="text" class="searchbox-input ins-search-input" placeholder="想要查找什么...">
            <span class="searchbox-close ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="searchbox-result-wrapper ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
    (function (window) {
        var INSIGHT_CONFIG = {
            TRANSLATION: {
                POSTS: '文章',
                PAGES: '页面',
                CATEGORIES: '分类',
                TAGS: '标签',
                UNTITLED: '(无标题)',
            },
            CONTENT_URL: '/content.json',
        };
        window.INSIGHT_CONFIG = INSIGHT_CONFIG;
    })(window);
</script>
<script src="/js/insight.js" defer></script>
<link rel="stylesheet" href="/css/search.css">
<link rel="stylesheet" href="/css/insight.css">
    
</body>
</html>